cr	equ	0dh
lf	equ	0ah
	org	100h
Start:	jmp	Begin
Msg	db	'Vvedite trehznachnie chisla, razdelennie probelom i najmite Enter:', cr, lf, '$'
SumNumb	dw	0
Begin:
	mov	ah,09h
	mov	dx,Msg
	int	21h
.M1:	call	Read_byte_dec
	add	bx,[SumNumb]
	mov	[SumNumb],bx
.M2:	mov	ah,8		;���� �������
	int	21h		; � ����������
	mov	dl,al           ;����������� ���� ������� � ������� DL ��� ����������� ������ �� �����
	cmp	al,20h		;��� ������� ����� 20h
	je	.M3		; ������� ������
	cmp	al,0dh		;��� ������� ����� 0dh
	jne	.M2		; ������� ���������
	jmp	.M4
.M3:	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	jmp	.M1

.M4:	mov	dl,cr
	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	mov	dl,lf
	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	mov	dx,[SumNumb]
	call	Write_word_dec
	mov	dl,cr
	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	mov	dl,lf
	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	mov	dx,[SumNumb]
	call	Write_word_hex 
	mov	ax,4c00h
	int	21h
;
;	����� ����������� ������������� ����� ������
;	--------------------------------------------
; �����: DX �������� ��������� �����
; ������: Write_digit_hex
;
Write_word_dec:
	push	ax
	push	bx
	push	cx
	push	dx
	pushf
	mov	ax,dx
	mov	bx,0Ah
	xor	cx,cx		;�������� �������� CX
.M1:	xor	dx,dx		; � DX
	div	bx              ;�������� DX:AX �� 10h
	push	dx		;�������� ������� � ����
	inc	cx		;�������� �������
	or	ax,ax		;���� ������� �� ����� 0
	jnz	.M1		; ��������� �������
.M2:	pop	bx              ;��������� ������ ����� �� �����
	call	Write_digit_hex	; � ������� �� �����
	dec	cx		;��������� �������
	or	cx,cx           ;���� ������� �� ����� 0 
	jnz	.M2		; ��������� ����
	popf
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
;
;	����� ������������������ ����� �� ������ ����� ������ ������ �����
;	-------------------------------------------------------------------------
; �����: DX �������� ��������� �����
; ������: Write_byte_hex
;
Write_word_hex:
	push	ax
	push	bx
	push	cx
	push	dx
	pushf
	mov	ax,dx
	mov	bx,10h
	xor	cx,cx		;�������� �������� CX
.M1:	xor	dx,dx		; � DX
	div	bx              ;�������� DX:AX �� 10h
	push	dx		;�������� ������� � ����
	inc	cx		;�������� �������
	or	ax,ax		;���� ������� �� ����� 0
	jnz	.M1		; ��������� �������
.M2:	pop	bx              ;��������� ������ ����� �� �����
	call	Write_digit_hex	; � ������� �� �����
	dec	cx		;��������� �������
	or	cx,cx           ;���� ������� �� ����� 0 
	jnz	.M2		; ��������� ����
	popf
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
;
;	����� ����������������� �����
;	-------------------------------
; �����: BL �������� ����������������� �����
; ������: Write_char
Write_digit_hex:
	push	dx
	mov	dl,bl
	cmp	dl,09h			;���� DL>9, �� ��������� �� .ja 
	ja	.ja                  
	add	dl,30h              	;�� 0 �� 9 + 30h
	jmp	.jmp
.ja:	add	dl,37h              	;�� A �� F + 37h
.jmp:	call	Write_char 
	pop	dx
	ret
;
;	����� ������� �� �����
;	----------------------
; �����: DL �������� ��� �������, ���������� �� �����
;
Write_char:
	push	ax
	cmp	dl,20h			;���� ��� ������� ������ 20h
	jae	.jae			; �� �������
	mov	dl,2Eh			; �����
.jae:	mov	ax,0200h		;������� ������ �������
	int	21h			;����� ������� �� �����
	pop	ax
	ret
;
;	���� ����� ���������� �����
;	----------------------------------
; ������: BL �������� ����������������� �����
;
Read_digit_dec:
	push	ax
	push	dx
	pushf
.M1:	mov	ah,8		;���� �������
	int	21h		; � ����������
	mov	dl,al           ;����������� ���� ������� � ������� DL ��� ����������� ������ �� �����
	cmp	al,30h		;��� ������� ������ 30h
	jb	.M2		; ���� �� ����� ��������
	cmp	al,39h		;��� ������� ������ 39h
	ja	.M2		; ��������� ������
	sub	al,30h          ;�������� �� ���� ������� 30h �������� ����� �� 0 �� 9
	clc			;���������� ���� CF
	jmp	.M3		;���� �� �����
.M2:	stc                     ;������������� ���� CF
.M3:	jc	.M1		;��������� ���� CF ���� ���������� �� ������������ � ������, ����� �������
	mov	bl,al		;���������� � ������� BL ���������� ��������
	mov	ah,2            ;������� ������ ��
	int	21h		; �����
	popf
	pop	dx
	pop	ax
	ret
;
;	���� ������������ ����������� �����
;	-----------------------------------------
; ������: BX �������� ����������� ���������� �����
; ������: Read_digit_hex
;
Read_byte_dec:
	push	ax
	push	cx
	push	dx
	pushf
	xor	ax,ax
	xor	bx,bx
	mov	cx,0Ah
	call	Read_digit_dec
	mov	al,bl
	call	Read_digit_dec
	mul	cx
	add	al,bl
	call	Read_digit_dec
	mul	cx
	add	al,bl
	mov	bx,ax
	popf
	pop	dx
	pop	cx
	pop	ax
	ret
	